/*
 * @Description: 
 * @Author: Junhuang
 * @Date: 2022-02-21 11:33:38
 * @LastEditTime: 2022-03-09 15:14:01
 * @LastEditors: Junhuang
 * @Reference: 
 */
'use strict';

const await = require('await-stream-ready/lib/await');

const Controller = require('egg').Controller;

class FavaController extends Controller {
  // 收藏作品
  async fava() {
    const { ctx, app } = this;
    let user_id = ctx.authUser.id;
    ctx.validate({
      video_id: {
        type: 'int',
        required: true,
        desc: '作品id'
      }
    })
    let { video_id } = ctx.request.body;
    let fava = await app.model.Fava.findOne({
      where: {
        video_id,
        user_id
      }
    })

    if (fava) {
      return ctx.apiFail('该作品已经收藏过');
    }

    let video = await app.model.Video.findByPk(video_id);
    if (!video) {
      return ctx.apiFail('将要收藏的作品不存在');
    }
    let res = await app.model.Fava.create({
      video_id,
      user_id
    })

    return ctx.apiSuccesss("收藏成功");
  }

  // 取消收藏
  async unfava() {
    const { ctx, app } = this;
    let user_id = ctx.authUser.id;
    ctx.validate({
      video_id: {
        type: 'int',
        required: true,
        desc: '作品id'
      }
    })
    let { video_id } = ctx.request.body;
    let fava = await app.model.Fava.findOne({
      where: {
        video_id,
        user_id
      }
    })

    if (!fava) {
      return ctx.apiFail('在未收藏前，无法取消');
    }

    let res = await fava.destroy();
    return ctx.apiSuccesss("取消收藏成功");

  }

  // 指定用户下的收藏列表API-分页
  // 【特别注意】模型关联查询
  // 路由：/fava_list/:page
  // 访问示例： http://127.0.0.1:7001/fava_list/1?user_id=1&limit=10
  async list() {
    const { ctx, app } = this;
    ctx.validate({
      user_id: {
        type: 'int',
        required: true,
        desc: '用户id'
      },
      page: {
        required: true,
        type: 'int',
        desc: '第几页'
      },
      limit: {
        required: false,
        type: 'int',
        desc: '每页几条'
      }
    })
    let user_id = ctx.query.user_id;
    let rows = await ctx.page(app.model.Fava, {
      user_id
    }, {
      // 【特别注意】模型关联查询
      include: [{
        model: app.model.Video
      }]
    });
    // rows的打印结果如下，返回的是一个fava的数组，其中每一个元素都有一个video属性
    //   [
    //     {
    //         "created_time": 1645453655000,
    //         "updated_time": 1645453655000,
    //         "id": 2,
    //         "user_id": 1,
    //         "video_id": 1,
    //         "userId": 1,
    //         "videoId": 1,
    //         "video": {
    //             "created_time": 1644932881000,
    //             "updated_time": 1644932907000,
    //             "id": 1,
    //             "title": "测试标题",
    //             "cover": "/static/demo/list2/2.jpg",
    //             "category_id": 2,
    //             "user_id": 1,
    //             "duration": 0,
    //             "desc": "",
    //             "play_count": 0,
    //             "danmu_count": 0
    //         }
    //     }
    // ]

    // 但是其实我们仅仅想要的是当前用户所有收藏的作品的列表，因此需要对rows进行转换
    let videos = rows.map(item => {
      return item.video
    })
    return ctx.apiSuccesss(videos);
  }
}

module.exports = FavaController;
